home *** CD-ROM | disk | FTP | other *** search
- Subject: v15i087: Mush (mail user's shell) upgrade kit, version 6.3, Part03/04
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rsalz@uunet.UU.NET
-
- Submitted-by: dheller@cory.Berkeley.EDU (Dan Heller)
- Posting-number: Volume 15, Issue 87
- Archive-name: mush6.3kit/part03
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of shell archive."
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'Diffs.6.3.b' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Diffs.6.3.b'\"
- else
- echo shar: Extracting \"'Diffs.6.3.b'\" \(57115 characters\)
- sed "s/^X//" >'Diffs.6.3.b' <<'END_OF_FILE'
- X! * message list if we hit the end. otherwise, stop at the end of the list.
- X */
- X next_msg()
- X {
- X--- 23,31 ----
- X }
- X
- X /*
- X! * loop thru all msgs starting with current_msg and find next undeleted and
- X! * unsaved message. If the variable "wrap" is set, wrap to the beginning of
- X! * the message list if we hit the end. otherwise, stop at the end of the list.
- X */
- X next_msg()
- X {
- X***************
- X*** 40,46 ****
- X return current_msg = msg_cnt - 1;
- X else
- X n = -1; /* increments to 0 in loop */
- X! else if (isoff(msg[n].m_flags, DELETE))
- X return current_msg = n;
- X return current_msg = 0;
- X }
- X--- 40,47 ----
- X return current_msg = msg_cnt - 1;
- X else
- X n = -1; /* increments to 0 in loop */
- X! else if (isoff(msg[n].m_flags, DELETE) &&
- X! isoff(msg[n].m_flags, SAVED))
- X return current_msg = n;
- X return current_msg = 0;
- X }
- X***************
- X*** 286,291 ****
- X--- 287,293 ----
- X case 'n' : turnon(newflag, UNREAD), turnoff(newflag, OLD);
- X when 'd' : turnon(newflag, DELETE);
- X when 'p' : turnon(newflag, PRESERVE);
- X+ when 's' : turnon(newflag, SAVED);
- X when 'u' : turnon(newflag, UNREAD); /* fall thru! */
- X case 'o' : turnon(newflag, OLD);
- X when 'r' :
- X***************
- X*** 313,318 ****
- X--- 315,322 ----
- X wprint(" PRESERVE");
- X if (ison(msg[i].m_flags, REPLIED))
- X wprint(" REPLIED");
- X+ if (ison(msg[i].m_flags, SAVED))
- X+ wprint(" SAVED");
- X if (ison(msg[i].m_flags, UPDATE_STATUS))
- X wprint(" UPDATE_STATUS");
- X wprint("\n");
- X***************
- X*** 342,347 ****
- X--- 346,352 ----
- X {
- X static FILE *pp;
- X static int cnt;
- X+ static u_long save_echo_flag;
- X
- X #ifdef SUNTOOL
- X if (istool) {
- X***************
- X*** 352,360 ****
- X #endif /* SUNTOOL */
- X if (start_pager) {
- X turnon(glob_flags, IGN_SIGS);
- X! if (!buf)
- X pp = stdout;
- X! else {
- X echo_on();
- X if (!(pp = popen(buf, "w")))
- X error(buf);
- X--- 357,371 ----
- X #endif /* SUNTOOL */
- X if (start_pager) {
- X turnon(glob_flags, IGN_SIGS);
- X! if (!buf) {
- X! /* internal pager */
- X! save_echo_flag = ison(glob_flags, ECHO_FLAG);
- X pp = stdout;
- X! if (save_echo_flag) {
- X! turnoff(glob_flags, ECHO_FLAG);
- X! echo_off();
- X! }
- X! } else {
- X echo_on();
- X if (!(pp = popen(buf, "w")))
- X error(buf);
- X***************
- X*** 364,370 ****
- X if (pp && pp != stdout)
- X pclose(pp);
- X pp = NULL_FILE;
- X! echo_off();
- X turnoff(glob_flags, IGN_SIGS);
- X } else if (pp != stdout)
- X return fputs(buf, pp); /* returns EOF if user exited pager */
- X--- 375,385 ----
- X if (pp && pp != stdout)
- X pclose(pp);
- X pp = NULL_FILE;
- X! if (save_echo_flag) {
- X! echo_on();
- X! turnon(glob_flags, ECHO_FLAG);
- X! } else
- X! echo_off();
- X turnoff(glob_flags, IGN_SIGS);
- X } else if (pp != stdout)
- X return fputs(buf, pp); /* returns EOF if user exited pager */
- X*** OLD/msgs.c Sat May 21 10:27:30 1988
- X--- msgs.c Tue Jul 5 22:53:26 1988
- X***************
- X*** 1,23 ****
- X /* @(#)msgs.c (c) copyright 10/18/86 (Dan Heller) */
- X
- X! #include "mush.h"
- X! #ifdef SYSV
- X! #ifndef USG
- X! #include <sys/locking.h>
- X! #else /* USG */
- X #include <unistd.h>
- X #endif /* USG */
- X! #endif /* SYSV */
- X
- X! lock_file(filename, fd)
- X char *filename;
- X {
- X #ifdef SYSV
- X #ifndef USG
- X! (void) locking(fd, LK_LOCK, 0); /* xenix */
- X #else
- X /* if unable to lock, tell them */
- X! if (Access(filename, W_OK) || lockf(fd, F_TLOCK, 0)) /* system-v */
- X return -1;
- X #endif /* USG */
- X #else
- X--- 1,63 ----
- X /* @(#)msgs.c (c) copyright 10/18/86 (Dan Heller) */
- X
- X! #ifdef USG
- X #include <unistd.h>
- X #endif /* USG */
- X! #include "mush.h"
- X! #if defined(SYSV) && !defined(USG)
- X! #include <sys/locking.h>
- X! #endif /* SYSV && !USG */
- X
- X! extern int sgid;
- X!
- X! #ifdef DOT_LOCK
- X! dot_lock(filename)
- X char *filename;
- X {
- X+ char buf[MAXPATHLEN];
- X+ int lockfd, cnt = 0;
- X+ SIGRET (*oldint)(), (*oldquit)();
- X+
- X+ setgid(sgid);
- X+ (void) sprintf(buf, "%s.lock", filename);
- X+ on_intr();
- X+ while ((lockfd = open(buf, O_CREAT|O_WRONLY|O_EXCL, 0600)) == -1) {
- X+ if (errno != EEXIST) {
- X+ error("unable to lock %s", filename);
- X+ break;
- X+ }
- X+ if (cnt++ == 0)
- X+ print("%s already locked, waiting", filename);
- X+ else
- X+ print_more(".");
- X+ sleep(1);
- X+ if (ison(glob_flags, WAS_INTR)) {
- X+ print_more("\nAborted.\n");
- X+ break;
- X+ }
- X+ }
- X+ off_intr();
- X+ if (lockfd != -1) {
- X+ if (cnt)
- X+ print("done.\n");
- X+ (void) close(lockfd);
- X+ }
- X+ setgid(getgid());
- X+ return lockfd == -1? -1 : 0;
- X+ }
- X+ #endif /* DOT_LOCK */
- X+
- X+ lock_file(filename, fp)
- X+ char *filename;
- X+ FILE *fp;
- X+ {
- X+ int fd = fileno(fp);
- X #ifdef SYSV
- X #ifndef USG
- X! (void) locking(fd, LK_LOCK, 0); /* old xenix (sys III) */
- X #else
- X /* if unable to lock, tell them */
- X! if (Access(filename, W_OK) || lockf(fd, F_LOCK, 0L)) /* system-v */
- X return -1;
- X #endif /* USG */
- X #else
- X***************
- X*** 31,39 ****
- X return 0;
- X }
- X
- X! close_lock(fp)
- X FILE *fp;
- X {
- X #ifdef SYSV
- X #ifndef USG
- X locking(fileno(fp), LK_UNLCK, 0);
- X--- 71,87 ----
- X return 0;
- X }
- X
- X! void
- X! close_lock(filename, fp)
- X! char *filename;
- X FILE *fp;
- X {
- X+ #ifdef DOT_LOCK
- X+ char buf[MAXPATHLEN];
- X+ setgid(sgid);
- X+ (void) unlink(sprintf(buf, "%s.lock", filename));
- X+ setgid(getgid());
- X+ #endif /* DOT_LOCK */
- X #ifdef SYSV
- X #ifndef USG
- X locking(fileno(fp), LK_UNLCK, 0);
- X***************
- X*** 65,77 ****
- X return;
- X }
- X set_isread(n);
- X! if (ison(flg, TOP)) {
- X turnon(flg, NO_HEADER);
- X print("Top of "), turnon(glob_flags, CONT_PRNT);
- X }
- X
- X if (!istool && isoff(flg, NO_PAGE) &&
- X! crt < msg[n].m_lines && isoff(flg, TOP)) {
- X char buf[32], *pager = do_set(set_options, "pager");
- X if (!pager)
- X pager = DEF_PAGER;
- X--- 113,125 ----
- X return;
- X }
- X set_isread(n);
- X! if (ison(flg, M_TOP)) {
- X turnon(flg, NO_HEADER);
- X print("Top of "), turnon(glob_flags, CONT_PRNT);
- X }
- X
- X if (!istool && isoff(flg, NO_PAGE) &&
- X! crt < msg[n].m_lines && isoff(flg, M_TOP)) {
- X char buf[32], *pager = do_set(set_options, "pager");
- X if (!pager)
- X pager = DEF_PAGER;
- X***************
- X*** 105,111 ****
- X char line[BUFSIZ], *show_hdrs = NULL;
- X
- X still_more = 0;
- X! if (ison(flags, TOP)) {
- X register char *p = do_set(set_options, "toplines");
- X top = (p)? atoi(p) : crt;
- X }
- X--- 153,159 ----
- X char line[BUFSIZ], *show_hdrs = NULL;
- X
- X still_more = 0;
- X! if (ison(flags, M_TOP)) {
- X register char *p = do_set(set_options, "toplines");
- X top = (p)? atoi(p) : crt;
- X }
- X***************
- X*** 184,189 ****
- X--- 232,239 ----
- X if (isoff(msg[n].m_flags, UNREAD) &&
- X isoff(msg[n].m_flags, PRESERVE))
- X *p++ = 'R';
- X+ if (ison(msg[n].m_flags, SAVED))
- X+ *p++ = 'S';
- X if (ison(msg[n].m_flags, REPLIED))
- X *p++ = 'r';
- X *p++ = '\n', *p = 0;
- X***************
- X*** 222,228 ****
- X }
- X }
- X }
- X! if (!on_hdr && ison(flags, TOP) && !--top)
- X break;
- X if (isoff(flags, NO_HEADER)) {
- X /* note that function returns the number of lines */
- X--- 272,278 ----
- X }
- X }
- X }
- X! if (!on_hdr && ison(flags, M_TOP) && !--top)
- X break;
- X if (isoff(flags, NO_HEADER)) {
- X /* note that function returns the number of lines */
- X***************
- X*** 261,268 ****
- X }
- X
- X /* get mail from whatever the mailfile points to. open a tempfile for
- X! * appending, then close it and reopen it for read-only. some systems
- X! * have flakey read/write access.
- X */
- X void
- X getmail()
- X--- 311,317 ----
- X }
- X
- X /* get mail from whatever the mailfile points to. open a tempfile for
- X! * appending, then close it and reopen it for read-only.
- X */
- X void
- X getmail()
- X***************
- X*** 272,286 ****
- X long ftell(), bytes;
- X char line[BUFSIZ];
- X
- X! #ifdef SYSV
- X! /* for SVID systems to lock, the file must be open for read/write */
- X! if (isoff(glob_flags, READ_ONLY))
- X! mail_fp = fopen(mailfile, "r+");
- X! else
- X! #endif /* SYSV */
- X! mail_fp = fopen(mailfile, "r");
- X!
- X! if (!mail_fp) {
- X error("Unable to open %s", mailfile);
- X return;
- X }
- X--- 321,327 ----
- X long ftell(), bytes;
- X char line[BUFSIZ];
- X
- X! if (!(mail_fp = fopen(mailfile, "r"))) {
- X error("Unable to open %s", mailfile);
- X return;
- X }
- X***************
- X*** 305,313 ****
- X } else if (msg_cnt)
- X (void) fseek(tmpf, msg[msg_cnt-1].m_offset+msg[msg_cnt-1].m_size,L_SET);
- X
- X- if (isoff(glob_flags, READ_ONLY) && lock_file(mailfile, fileno(mail_fp)))
- X- error("WARNING: unable to lock %s", mailfile);
- X-
- X (void) fseek(mail_fp, ftell(tmpf), L_SET);
- X
- X #ifdef MSG_SEPARATOR
- X--- 346,351 ----
- X***************
- X*** 345,351 ****
- X if (isoff(glob_flags, READ_ONLY)) {
- X fputs(line, tmpf);
- X if (errno == ENOSPC)
- X! fs_error();
- X }
- X /* we've read the "From " line, now read the rest of
- X * the message headers till we get to a blank line.
- X--- 383,389 ----
- X if (isoff(glob_flags, READ_ONLY)) {
- X fputs(line, tmpf);
- X if (errno == ENOSPC)
- X! fs_error(mailfile, mail_fp);
- X }
- X /* we've read the "From " line, now read the rest of
- X * the message headers till we get to a blank line.
- X***************
- X*** 358,363 ****
- X--- 396,402 ----
- X switch(*p) {
- X when 'R': turnoff(msg[msg_cnt].m_flags, UNREAD);
- X when 'P': turnon(msg[msg_cnt].m_flags, UNREAD);
- X+ when 'S': turnon(msg[msg_cnt].m_flags, SAVED);
- X when 'r': turnon(msg[msg_cnt].m_flags, REPLIED);
- X otherwise :
- X if (ison(glob_flags, WARNING))
- X***************
- X*** 368,374 ****
- X if (isoff(glob_flags, READ_ONLY)) {
- X fputs(line, tmpf);
- X if (errno == ENOSPC)
- X! fs_error();
- X }
- X }
- X msg_cnt++, get_status = 1;
- X--- 407,413 ----
- X if (isoff(glob_flags, READ_ONLY)) {
- X fputs(line, tmpf);
- X if (errno == ENOSPC)
- X! fs_error(mailfile, mail_fp);
- X }
- X }
- X msg_cnt++, get_status = 1;
- X***************
- X*** 377,383 ****
- X if (isoff(glob_flags, READ_ONLY)) {
- X fputs(line, tmpf);
- X if (errno == ENOSPC)
- X! fs_error();
- X } else
- X (void) fseek(tmpf, ftell(mail_fp), L_SET);
- X }
- X--- 416,422 ----
- X if (isoff(glob_flags, READ_ONLY)) {
- X fputs(line, tmpf);
- X if (errno == ENOSPC)
- X! fs_error(mailfile, mail_fp);
- X } else
- X (void) fseek(tmpf, ftell(mail_fp), L_SET);
- X }
- X***************
- X*** 387,409 ****
- X msg[msg_cnt-1].m_lines = lines;
- X }
- X
- X- close_lock(mail_fp);
- X-
- X- /* I've had problems with sys-v opening a file for read/write. I'd
- X- * try fgets after a seek to an arbitrary place and get NULL. "w+"
- X- * could be broken (XENIX), so play it safe anyway.
- X- */
- X if (isoff(glob_flags, READ_ONLY)) {
- X fclose(tmpf);
- X if (!(tmpf = fopen(tempfile, "r")))
- X error("unable to open %s for reading", tempfile);
- X }
- X }
- X
- X! fs_error()
- X {
- X error("WARNING: unable to write to \"%s\"", tempfile);
- X print("Read the manual on what to do on full file systems.\n");
- X cleanup(0);
- X }
- X
- X--- 426,447 ----
- X msg[msg_cnt-1].m_lines = lines;
- X }
- X
- X if (isoff(glob_flags, READ_ONLY)) {
- X fclose(tmpf);
- X if (!(tmpf = fopen(tempfile, "r")))
- X error("unable to open %s for reading", tempfile);
- X }
- X+ fclose(mail_fp);
- X }
- X
- X! void
- X! fs_error(mailfile, mail_fp)
- X! char *mailfile;
- X! FILE *mail_fp;
- X {
- X error("WARNING: unable to write to \"%s\"", tempfile);
- X print("Read the manual on what to do on full file systems.\n");
- X+ close_lock(mailfile, mail_fp);
- X cleanup(0);
- X }
- X
- X***************
- X*** 413,423 ****
- X */
- X copyback()
- X {
- X! register int new = 0, i, j=0, k=0;
- X register long flg = 0;
- X! register FILE *mbox = NULL_FILE, *mail_fp;
- X char *mbox_file, action = 0;
- X! int hold = 0, delete_it = 0, dont_unlink = FALSE;
- X
- X #ifdef SUNTOOL
- X if (istool) {
- X--- 451,461 ----
- X */
- X copyback()
- X {
- X! register int new = 0, i=0, j=0, k=0;
- X register long flg = 0;
- X! register FILE *mbox = NULL_FILE, *mail_fp = NULL_FILE;
- X char *mbox_file, action = 0;
- X! int hold = 0, delete_it = 0, dont_unlink = FALSE, keepsave;
- X
- X #ifdef SUNTOOL
- X if (istool) {
- X***************
- X*** 467,472 ****
- X--- 505,513 ----
- X error("Unable to write to %s", mbox_file);
- X }
- X }
- X+ #ifdef DOT_LOCK
- X+ if ((i = dot_lock(mailfile)) == 0)
- X+ #endif /* DOT_LOCK */
- X /* reopen the mailfile; set umask accordingly */
- X {
- X int omask = umask(077);
- X***************
- X*** 474,491 ****
- X (void) umask(omask);
- X if (!mail_fp) {
- X error("Unable to rewrite %s", mailfile);
- X return 0;
- X }
- X }
- X! turnon(glob_flags, IGN_SIGS);
- X! print("Updating \"%s\"", mailfile);
- X!
- X! if (lock_file(mailfile, fileno(mail_fp)))
- X error("WARNING: unable to lock %s", mailfile);
- X
- X turnon(flg, UPDATE_STATUS);
- X turnon(flg, NO_IGNORE);
- X
- X for (i = 0; i < msg_cnt; i++)
- X /* check to see if message is marked for deletion or, if read and not
- X * preserved, delete it if autodelete is set. Otherwise, save the
- X--- 515,544 ----
- X (void) umask(omask);
- X if (!mail_fp) {
- X error("Unable to rewrite %s", mailfile);
- X+ if (mbox)
- X+ fclose(mbox);
- X return 0;
- X }
- X }
- X! if (i != 0 || lock_file(mailfile, mail_fp) == -1) {
- X! #ifndef DOT_LOCK
- X error("WARNING: unable to lock %s", mailfile);
- X+ #endif /* DOT_LOCK */
- X+ if (mail_fp)
- X+ close_lock(mailfile, mail_fp);
- X+ if (mbox)
- X+ fclose(mbox);
- X+ return 0;
- X+ }
- X
- X+ print("Updating \"%s\"", mailfile);
- X+
- X turnon(flg, UPDATE_STATUS);
- X turnon(flg, NO_IGNORE);
- X+ turnon(glob_flags, IGN_SIGS);
- X
- X+ keepsave = !!do_set(set_options, "keepsave");
- X+
- X for (i = 0; i < msg_cnt; i++)
- X /* check to see if message is marked for deletion or, if read and not
- X * preserved, delete it if autodelete is set. Otherwise, save the
- X***************
- X*** 492,498 ****
- X * message in the spool file if hold is set. If all fails, save in mbox.
- X */
- X if (ison(msg[i].m_flags, DELETE)
- X! || isoff(msg[i].m_flags, UNREAD) && isoff(msg[i].m_flags, PRESERVE)
- X && delete_it) {
- X Debug("%s %d",
- X (action!='d')? "\ndeleting message:" : "", i+1), action = 'd';
- X--- 545,553 ----
- X * message in the spool file if hold is set. If all fails, save in mbox.
- X */
- X if (ison(msg[i].m_flags, DELETE)
- X! || ison(msg[i].m_flags, SAVED) && !keepsave &&
- X! isoff(msg[i].m_flags, PRESERVE)
- X! || isoff(msg[i].m_flags, UNREAD) && isoff(msg[i].m_flags, PRESERVE)
- X && delete_it) {
- X Debug("%s %d",
- X (action!='d')? "\ndeleting message:" : "", i+1), action = 'd';
- X***************
- X*** 524,531 ****
- X }
- X Debug("\n%s", mailfile);
- X
- X! close_lock(mail_fp);
- X
- X if (mbox)
- X fclose(mbox);
- X if (j) {
- X--- 579,594 ----
- X }
- X Debug("\n%s", mailfile);
- X
- X! close_lock(mailfile, mail_fp);
- X
- X+ #ifdef SUNTOOL
- X+ if (istool) {
- X+ mail_timer.it_value.tv_sec = time_out;
- X+ setitimer(ITIMER_REAL, &mail_timer, NULL);
- X+ }
- X+ #endif /* SUNTOOL */
- X+
- X+ /* some users like to have zero length folders for frequent usage */
- X if (mbox)
- X fclose(mbox);
- X if (j) {
- X***************
- X*** 534,540 ****
- X if (!strcmp(mailfile, spoolfile) && utime(mailfile, times))
- X error("utime");
- X print_more(": saved %d message%s\n", j, (j==1)? NO_STRING: "s");
- X! } else if (strcmp(mailfile, spoolfile) && !dont_unlink && !new)
- X if (unlink(mailfile))
- X turnon(glob_flags, CONT_PRNT), error(": cannot remove");
- X else
- X--- 597,604 ----
- X if (!strcmp(mailfile, spoolfile) && utime(mailfile, times))
- X error("utime");
- X print_more(": saved %d message%s\n", j, (j==1)? NO_STRING: "s");
- X! } else if (strcmp(mailfile, spoolfile) && !dont_unlink && !new &&
- X! !do_set(set_options, "save_empty"))
- X if (unlink(mailfile))
- X turnon(glob_flags, CONT_PRNT), error(": cannot remove");
- X else
- X***************
- X*** 542,557 ****
- X else
- X print_more(": empty\n");
- X if (k)
- X! print("saved %d message%s in %s\n",k,(k==1)? NO_STRING: "s",mbox_file);
- X if (new && !istool)
- X print("New mail has arrived.\n");
- X turnoff(glob_flags, IGN_SIGS);
- X! #ifdef SUNTOOL
- X! if (istool) {
- X! mail_timer.it_value.tv_sec = time_out;
- X! setitimer(ITIMER_REAL, &mail_timer, NULL);
- X! }
- X! #endif /* SUNTOOL */
- X return 1;
- X }
- X
- X--- 606,617 ----
- X else
- X print_more(": empty\n");
- X if (k)
- X! print("saved %d message%s in %s\n",k,(k==1)? NO_STRING:"s", mbox_file);
- X if (new && !istool)
- X print("New mail has arrived.\n");
- X+
- X turnoff(glob_flags, IGN_SIGS);
- X!
- X return 1;
- X }
- X
- X*** OLD/mush.1 Thu May 12 21:14:45 1988
- X--- mush.1 Tue Jun 28 21:38:26 1988
- X***************
- X*** 167,178 ****
- X a database of electronic mail messages under the
- X .I UNIX
- X environment.
- X! There are three user interfaces which allow the user to interact with
- X .I Mush.
- X The default interface is the conventional tty-based line mode
- X similar to command line interpreters such as
- X .I csh
- X! as well as other mailers, such as University of California, Berkeley's,
- X .I Mail
- X and Bell Lab's System V
- X .I mailx
- X--- 167,178 ----
- X a database of electronic mail messages under the
- X .I UNIX
- X environment.
- X! There are three user interfaces that allow the user to interact with
- X .I Mush.
- X The default interface is the conventional tty-based line mode
- X similar to command line interpreters such as
- X .I csh
- X! as well as other mailers, such as University of California, Berkeley's
- X .I Mail
- X and Bell Lab's System V
- X .I mailx
- X***************
- X*** 204,210 ****
- X See the corresponding sections for more information on the user
- X interface desired.
- X Most of this manual deals with commands, variables
- X! and actions which are common to all three interfaces although
- X some attention is paid to individual characteristics of each interface.
- X .PP
- X The following command line arguments are understood by
- X--- 204,210 ----
- X See the corresponding sections for more information on the user
- X interface desired.
- X Most of this manual deals with commands, variables
- X! and actions that are common to all three interfaces although
- X some attention is paid to individual characteristics of each interface.
- X .PP
- X The following command line arguments are understood by
- X***************
- X*** 215,221 ****
- X .TP
- X \-c cc-list
- X The list of Carbon Copy recipients is set on the command line.
- X! If more than one address is specified, the entire list should be encased in
- X quotes.
- X This applies when sending mail only.
- X If you are entering the shell, curses mode, or the tool mode, this option is
- X--- 215,221 ----
- X .TP
- X \-c cc-list
- X The list of Carbon Copy recipients is set on the command line.
- X! If more than one address is specified, the entire list should be enclosed in
- X quotes.
- X This applies when sending mail only.
- X If you are entering the shell, curses mode, or the tool mode, this option is
- X***************
- X*** 229,239 ****
- X .TP
- X \-F[!] filename
- X This file is the same type as the initialization file read on startup
- X! (see INITIALIZATION) with the exception that commands which manipulate
- X or search messages may be given. Normally, such commands may not exist
- X in the initialization file since that file is read before the folder
- X is scanned. This file is read after the folder is scanned, so commands
- X! which change folders are allowed.
- X The optional `!' argument prevents the shell from running after the file
- X has been sourced. Otherwise,
- X .I Mush
- X--- 229,239 ----
- X .TP
- X \-F[!] filename
- X This file is the same type as the initialization file read on startup
- X! (see INITIALIZATION) with the exception that commands that manipulate
- X or search messages may be given. Normally, such commands may not exist
- X in the initialization file since that file is read before the folder
- X is scanned. This file is read after the folder is scanned, so commands
- X! that change folders are allowed.
- X The optional `!' argument prevents the shell from running after the file
- X has been sourced. Otherwise,
- X .I Mush
- X***************
- X*** 269,275 ****
- X .I Mush
- X commands.
- X See the INITIALIZATION section for information on how to
- X! write scripts which deal with mail.
- X Note that this flag is different from the \*Qignore\*U flag of UCB Mail.
- X .TP
- X \-N
- X--- 269,275 ----
- X .I Mush
- X commands.
- X See the INITIALIZATION section for information on how to
- X! write scripts that deal with mail.
- X Note that this flag is different from the \*Qignore\*U flag of UCB Mail.
- X .TP
- X \-N
- X***************
- X*** 304,310 ****
- X \-s subject
- X The subject is set on the command line using this flag.
- X If the subject has
- X! any spaces or tabs, the entire subject should be encased in quotes.
- X This applies when sending mail only.
- X If you are entering the shell,
- X curses mode, or the tool mode, this option is ignored.
- X--- 304,310 ----
- X \-s subject
- X The subject is set on the command line using this flag.
- X If the subject has
- X! any spaces or tabs, the entire subject should be enclosed in quotes.
- X This applies when sending mail only.
- X If you are entering the shell,
- X curses mode, or the tool mode, this option is ignored.
- X***************
- X*** 395,401 ****
- X .I Mush
- X has command line history reminiscent of
- X .IR csh ,
- X! commands which use UUCP's `!' character for user-host and host-host
- X separation should be escaped (preceded by a backslash).
- X This is not necessary in the initialization file (.mushrc) because history
- X referencing is ignored while these files are being sourced.
- X--- 395,401 ----
- X .I Mush
- X has command line history reminiscent of
- X .IR csh ,
- X! commands that use UUCP's `!' character for user-host and host-host
- X separation should be escaped (preceded by a backslash).
- X This is not necessary in the initialization file (.mushrc) because history
- X referencing is ignored while these files are being sourced.
- X***************
- X*** 415,421 ****
- X .PP
- X .BR "Command Line Aliases" .
- X .PP
- X! Command aliases are different than mail aliases in that they are used
- X to expand to commands.
- X The usage of command line aliases is similar to that supplied by
- X .IR csh .
- X--- 415,421 ----
- X .PP
- X .BR "Command Line Aliases" .
- X .PP
- X! Command aliases are different from mail aliases in that they are used
- X to expand to commands.
- X The usage of command line aliases is similar to that supplied by
- X .IR csh .
- X***************
- X*** 428,434 ****
- X one command to be used as input to the next command in the pipeline.
- X However, the output of commands is not the \*Qtext\*U that is returned
- X (as it is in
- X! .IR csh ),
- X but the messages that are affected.
- X .PP
- X .BR Help .
- X--- 428,434 ----
- X one command to be used as input to the next command in the pipeline.
- X However, the output of commands is not the \*Qtext\*U that is returned
- X (as it is in
- X! .IR csh )
- X but the messages that are affected.
- X .PP
- X .BR Help .
- X***************
- X*** 489,495 ****
- X The default system initialization file is read first and then the
- X user's personal initialization file is read.
- X The system default file
- X! is set up by the system administrator and may contain commands which
- X should be set system-wide.
- X .PP
- X The user's file is determined by first looking for the environment variable
- X--- 489,495 ----
- X The default system initialization file is read first and then the
- X user's personal initialization file is read.
- X The system default file
- X! is set up by the system administrator and may contain commands that
- X should be set system-wide.
- X .PP
- X The user's file is determined by first looking for the environment variable
- X***************
- X*** 497,503 ****
- X If that file isn't found, then the file
- X .I .mushrc
- X is searched for in the home directory of the user.
- X! If that file cannot be found, it will attempt to read the file,
- X .I .mailrc
- X from the same directory.
- X Finally, if that file cannot be read, no initialization is done
- X--- 497,503 ----
- X If that file isn't found, then the file
- X .I .mushrc
- X is searched for in the home directory of the user.
- X! If that file cannot be found, it will attempt to read the file
- X .I .mailrc
- X from the same directory.
- X Finally, if that file cannot be read, no initialization is done
- X***************
- X*** 550,556 ****
- X It may be anywhere on a line in the file.
- X When that character is encountered,
- X processing of that line is discontinued to the end of the line.
- X! If the `#' is encased in quotes (single or double), then it is not
- X considered a comment.
- X Examples:
- X .sp
- X--- 550,556 ----
- X It may be anywhere on a line in the file.
- X When that character is encountered,
- X processing of that line is discontinued to the end of the line.
- X! If the `#' is enclosed in quotes (single or double), then it is not
- X considered a comment.
- X Examples:
- X .sp
- X***************
- X*** 580,586 ****
- X The statements associated with an \*Qif\*U expression are never on the same
- X line with the conditional.
- X .PP
- X! Conditional expressions understood include the internal variables,
- X .IR istool ,
- X .IR iscurses ,
- X .IR hdrs_only ,
- X--- 580,586 ----
- X The statements associated with an \*Qif\*U expression are never on the same
- X line with the conditional.
- X .PP
- X! Conditional expressions understood include the internal variables
- X .IR istool ,
- X .IR iscurses ,
- X .IR hdrs_only ,
- X***************
- X*** 613,619 ****
- X If \-i is specified, the value for
- X .I redirect
- X will be set to false.
- X! These are internal variables whose values can not be referenced using the
- X \*Q$variable\*U method of variable expansion.
- X .PP
- X The `!' operator may be used to negate expressions, thus,
- X--- 613,619 ----
- X If \-i is specified, the value for
- X .I redirect
- X will be set to false.
- X! These are internal variables whose values cannot be referenced using the
- X \*Q$variable\*U method of variable expansion.
- X .PP
- X The `!' operator may be used to negate expressions, thus,
- X***************
- X*** 666,673 ****
- X Like other interactive commands, the
- X .B curses
- X command itself should never be called from an initialization file.
- X! Doing so will cause terminal settings to be set incorrectly and unpredictable
- X! results from there.
- X See the CURSES INTERFACE section for configuring your
- X environment so you enter curses mode each time you run the shell.
- X .PP
- X--- 666,673 ----
- X Like other interactive commands, the
- X .B curses
- X command itself should never be called from an initialization file.
- X! Doing so will cause terminal settings to be set incorrectly and cause
- X! unpredictable results from there.
- X See the CURSES INTERFACE section for configuring your
- X environment so you enter curses mode each time you run the shell.
- X .PP
- X***************
- X*** 698,703 ****
- X--- 698,731 ----
- X .I less
- X normally fails to function correctly
- X for the terminal type \*Qadm3a\*U so we don't use it.
- X+ .sp
- X+ Also supported in \*Qif\*U expressions are the test flags \*Q-e\*U
- X+ and \*Q-z\*U. These flags test to see if a file exists (\*Q-e\*U) or
- X+ if it is zero-length (\*Q-z\*U).
- X+ .sp
- X+ .nf
- X+ .in +2
- X+ set mbox = ~/Mail/mbox
- X+ set newfolder = /usr/spool/mail/$USER
- X+ if -z $newfolder
- X+ .ti +4
- X+ set newfolder = $mbox
- X+ endif
- X+ if -e $newfolder
- X+ .ti +4
- X+ folder $newfolder
- X+ else
- X+ .ti +4
- X+ quit
- X+ endif
- X+ .fi
- X+ .sp
- X+ This sets a new variable called \fBnewfolder\fR to the the user's spool
- X+ mailbox (the system mailbox). It then tests to see if it is zero length,
- X+ and if it is, resets the variable to the value of the user's \fBmbox\fR
- X+ variable (mbox must be set here). It then tests to see if the new folder
- X+ exists. If it does, it changes folders to the new folder. If it doesn't
- X+ exist, the program exits (via \fBquit\fR).
- X .PP
- X After sourcing the initialization file,
- X .I Mush
- X***************
- X*** 712,718 ****
- X variable set, then when the current folder's messages have all been read,
- X the messages are sorted according to the value of the
- X variable (see the sort entry under the VARIABLES heading for more information).
- X! Each message has a number of message header lines which contain information
- X about whom the mail is from, the subject of the message, the date it was
- X received, and other information about the letter.
- X This information is then compiled into a one-line summary for
- X--- 740,746 ----
- X variable set, then when the current folder's messages have all been read,
- X the messages are sorted according to the value of the
- X variable (see the sort entry under the VARIABLES heading for more information).
- X! Each message has a number of message header lines that contain information
- X about whom the mail is from, the subject of the message, the date it was
- X received, and other information about the letter.
- X This information is then compiled into a one-line summary for
- X***************
- X*** 747,753 ****
- X the group \*Qunix-wizards\*U (of which the user is an elite
- X member) and save them in the file $folder/wizmail.
- X Last, the folder will be updated, removing all deleted mail
- X! (saved mail may be marked as deleted),
- X and the folder is reread and sorted according to the date of the messages.
- X .SH "GENERAL USAGE"
- X Because there are three different interfaces available to the user,
- X--- 775,781 ----
- X the group \*Qunix-wizards\*U (of which the user is an elite
- X member) and save them in the file $folder/wizmail.
- X Last, the folder will be updated, removing all deleted mail
- X! (saved mail may be marked as deleted)
- X and the folder is reread and sorted according to the date of the messages.
- X .SH "GENERAL USAGE"
- X Because there are three different interfaces available to the user,
- X***************
- X*** 754,760 ****
- X the tty characteristics (backspace, kill-word, kill-line, redraw line)
- X are simulated identically in all interfaces.
- X When the user has to type something, the 4.2BSD style of tty driver interface
- X! is simulated whether you're in the window system, the curses mode, the tty-line
- X mode, and even on System-V machines.
- X This means that backspacing causes a
- X backspace-space-backspace effect (erasing the character backspaced over).
- X--- 782,789 ----
- X the tty characteristics (backspace, kill-word, kill-line, redraw line)
- X are simulated identically in all interfaces.
- X When the user has to type something, the 4.2BSD style of tty driver interface
- X! is simulated whether you're in the window system, the curses mode, or
- X! the tty-line
- X mode, and even on System-V machines.
- X This means that backspacing causes a
- X backspace-space-backspace effect (erasing the character backspaced over).
- X***************
- X*** 767,788 ****
- X If the message is marked as deleted, then use the
- X .B undelete
- X command supplied by the interface you are using.
- X! To display a message in line mode, specify a message to be displayed using
- X .BR print ,
- X .BR type ,
- X .BR p ,
- X .BR t ,
- X! or by typing the message number, that message will be printed on the screen.
- X .PP
- X In curses mode, move the cursor over the message you want and type
- X a `t' or `p' to read the message.
- X! The user may \*Qbind\*U other keys to call
- X! the function which displays messages if `t' and `p' are uncomfortable.
- X .PP
- X In the graphics mode, move the mouse over the message you wish to
- X be displayed and select the LEFT mouse button.
- X! If the message you want is not visible (in the header subwindow), you may type
- X! in the message subwindow the number of the message and hit return.
- X That message number will be displayed.
- X .PP
- X In the line or curses mode, if the message has more lines than the variable
- X--- 796,817 ----
- X If the message is marked as deleted, then use the
- X .B undelete
- X command supplied by the interface you are using.
- X! To display a message in line mode, specify the message using
- X .BR print ,
- X .BR type ,
- X .BR p ,
- X .BR t ,
- X! or type a message number to display that message on the screen.
- X .PP
- X In curses mode, move the cursor over the message you want and type
- X a `t' or `p' to read the message.
- X! You may \*Qbind\*U other keys to call
- X! the function that displays messages if `t' and `p' are uncomfortable.
- X .PP
- X In the graphics mode, move the mouse over the message you wish to
- X be displayed and select the LEFT mouse button.
- X! If the message you want is not visible (in the header subwindow), you may type,
- X! in the message subwindow, the number of the message and hit return.
- X That message number will be displayed.
- X .PP
- X In the line or curses mode, if the message has more lines than the variable
- X***************
- X*** 842,848 ****
- X For instance, typing \*Q~i\*U (alone on a line) will place a copy
- X of the \*Qcurrent message\*U into your message body.
- X It will not include the message headers of the message, just the body of text
- X! which composes the message.
- X .PP
- X Available
- X .BR "tilde escapes" :
- X--- 871,877 ----
- X For instance, typing \*Q~i\*U (alone on a line) will place a copy
- X of the \*Qcurrent message\*U into your message body.
- X It will not include the message headers of the message, just the body of text
- X! that comprises the message.
- X .PP
- X Available
- X .BR "tilde escapes" :
- X***************
- X*** 862,868 ****
- X Save the contents of the letter to \*Qdead.letter\*U
- X (unless the `!' is specified) and then clear the message buffer; the user
- X remains in editing mode.
- X! If the variable,
- X .B nosave
- X is set, then `!' need not be specified.
- X .TP
- X--- 891,897 ----
- X Save the contents of the letter to \*Qdead.letter\*U
- X (unless the `!' is specified) and then clear the message buffer; the user
- X remains in editing mode.
- X! If the variable
- X .B nosave
- X is set, then `!' need not be specified.
- X .TP
- X***************
- X*** 913,923 ****
- X .TP
- X ~S[!]
- X Include [don't include] signature at end of message.
- X! The variables,
- X .B autosign
- X and
- X .B autosign2
- X! describes the file or string to append to the message.
- X See the VARIABLES section for more information on these variables.
- X .TP
- X ~s [subject]
- X--- 942,952 ----
- X .TP
- X ~S[!]
- X Include [don't include] signature at end of message.
- X! The variables
- X .B autosign
- X and
- X .B autosign2
- X! describe the file or string to append to the message.
- X See the VARIABLES section for more information on these variables.
- X .TP
- X ~s [subject]
- X***************
- X*** 974,980 ****
- X Run the
- X .I Mush
- X command specified by \*Qcommand\*U.
- X! You may not run any command which sends mail.
- X It is inadvisable to change folders at this time
- X since the current message list may be corrupted, but the action is
- X allowed nonetheless to provide flexibility for experienced users.
- X--- 1003,1009 ----
- X Run the
- X .I Mush
- X command specified by \*Qcommand\*U.
- X! You may not run any command that sends mail.
- X It is inadvisable to change folders at this time
- X since the current message list may be corrupted, but the action is
- X allowed nonetheless to provide flexibility for experienced users.
- X***************
- X*** 993,999 ****
- X .SH "LINE-MODE INTERFACE"
- X In the line-mode, the user is given a prompt to which commands are issued
- X and arguments are passed to commands.
- X! When the user types at the prompt, each line is parsed and words (or,
- X arguments) are separated into an array of strings.
- X This array, also called an
- X .IR "argument vector" ,
- X--- 1022,1028 ----
- X .SH "LINE-MODE INTERFACE"
- X In the line-mode, the user is given a prompt to which commands are issued
- X and arguments are passed to commands.
- X! When the user types at the prompt, each line is parsed and words (or
- X arguments) are separated into an array of strings.
- X This array, also called an
- X .IR "argument vector" ,
- X***************
- X*** 1036,1042 ****
- X is used in the same manner as in
- X .IR csh .
- X There is a limited implementation of history modification;
- X! supported are the argument selectors which reference
- X command line arguments and \*Q:p\*U (echo, but don't execute the command).
- X .sp
- X Examples:
- X--- 1065,1071 ----
- X is used in the same manner as in
- X .IR csh .
- X There is a limited implementation of history modification;
- X! supported are the argument selectors that reference
- X command line arguments and \*Q:p\*U (echo, but don't execute the command).
- X .sp
- X Examples:
- X***************
- X*** 1104,1110 ****
- X in a message.
- X A
- X .B "message list"
- X! is defined as the set of messages which the user specifies in a command or
- X the messages a command affects after it is through executing.
- X When one command is piped to another, the effect is that the second command
- X will consider only those messages affected by first command.
- X--- 1133,1139 ----
- X in a message.
- X A
- X .B "message list"
- X! is defined as the set of messages that the user specifies in a command or
- X the messages a command affects after it is through executing.
- X When one command is piped to another, the effect is that the second command
- X will consider only those messages affected by first command.
- X***************
- X*** 1129,1135 ****
- X .ti +2
- X headers :o | delete
- X .sp
- X! Delete's all old (already read) mail.
- X .PP
- X Because action is taken on mail messages, not files,
- X metacharacters such as `*' and `?' are not expanded to file names as
- X--- 1158,1164 ----
- X .ti +2
- X headers :o | delete
- X .sp
- X! Deletes all old (already read) mail.
- X .PP
- X Because action is taken on mail messages, not files,
- X metacharacters such as `*' and `?' are not expanded to file names as
- X***************
- X*** 1140,1146 ****
- X commands take
- X .I "message lists"
- X as arguments (a list references one or messages) to take action upon.
- X! To reference message numbers,
- X .I Mush
- X understands the following special syntax:
- X .sp
- X--- 1169,1175 ----
- X commands take
- X .I "message lists"
- X as arguments (a list references one or messages) to take action upon.
- X! When referencing message numbers,
- X .I Mush
- X understands the following special syntax:
- X .sp
- X***************
- X*** 1200,1206 ****
- X .PP
- X If
- X .I unix
- X! it is not set, or if the command could not be found in the user's PATH
- X environment, a message will be printed indicating that the command was
- X not found.
- X .PP
- X--- 1229,1235 ----
- X .PP
- X If
- X .I unix
- X! is not set, or if the command could not be found in the user's PATH
- X environment, a message will be printed indicating that the command was
- X not found.
- X .PP
- X***************
- X*** 1209,1216 ****
- X commands, piping is disallowed either to or from such commands.
- X If the user wishes to execute
- X .I UNIX
- X! commands which are to be piped to one another (or use any sort of redirection),
- X! the command,
- X .B sh
- X is provided for such purposes.
- X Since
- X--- 1238,1245 ----
- X commands, piping is disallowed either to or from such commands.
- X If the user wishes to execute
- X .I UNIX
- X! commands that are to be piped to one another (or use any sort of redirection),
- X! the command
- X .B sh
- X is provided for such purposes.
- X Since
- X***************
- X*** 1256,1262 ****
- X If you want to enter curses mode even if
- X you don't have mail, use the \-S option on the command line.
- X .PP
- X! In curses mode, the user's terminal has it's \*Qecho\*U turned off so commands
- X that are issued are not echoed on the screen.
- X Certain commands cause the mode
- X to return to normal for typing purposes (sending mail, for example).
- X--- 1285,1291 ----
- X If you want to enter curses mode even if
- X you don't have mail, use the \-S option on the command line.
- X .PP
- X! In curses mode, the user's terminal has its \*Qecho\*U turned off so commands
- X that are issued are not echoed on the screen.
- X Certain commands cause the mode
- X to return to normal for typing purposes (sending mail, for example).
- X***************
- X*** 1273,1279 ****
- X Note that the top line is reserved for \*Qstatus\*U and the bottom line is
- X for user interaction should it be required.
- X .PP
- X! The user may now type commands via key sequences which are not echoed
- X to the screen.
- X Thus, function keys may be bound to \*Qcommands\*U by using the
- X .B bind
- X--- 1302,1308 ----
- X Note that the top line is reserved for \*Qstatus\*U and the bottom line is
- X for user interaction should it be required.
- X .PP
- X! The user may now type commands via key sequences that are not echoed
- X to the screen.
- X Thus, function keys may be bound to \*Qcommands\*U by using the
- X .B bind
- X***************
- X*** 1334,1340 ****
- X lines of a message.
- X Next will print the next message.
- X If the current message is deleted, the next undeleted message is found.
- X! You might notice this is different than the line mode, which will return
- X an error message that the current message is marked as deleted.
- X .TP
- X +, j, J, RETURN
- X--- 1363,1369 ----
- X lines of a message.
- X Next will print the next message.
- X If the current message is deleted, the next undeleted message is found.
- X! You might notice this is different from the line mode, which will return
- X an error message that the current message is marked as deleted.
- X .TP
- X +, j, J, RETURN
- X***************
- X*** 1367,1373 ****
- X When the \*Qgoto\*U command
- X is selected, a prompt at the bottom of the window prompts for a
- X .BR "message list" .
- X! Anything which describes a message list may be used.
- X Since
- X .I Mush
- X commands return message lists, a legal
- X--- 1396,1402 ----
- X When the \*Qgoto\*U command
- X is selected, a prompt at the bottom of the window prompts for a
- X .BR "message list" .
- X! Anything that describes a message list may be used.
- X Since
- X .I Mush
- X commands return message lists, a legal
- X***************
- X*** 1504,1510 ****
- X .PP
- X To specify control characters in ascii format for the bind command, the
- X sequence \*Q\\Cc\*U is used where `c' is the
- X! character which the control key will translate to and must be in upper case.
- X The sequence \*Q\\CP\*U would map to control-P.
- X If the user wishes to indicate the RETURN key, this is specified
- X with the string \*Q\\n\*U and
- X--- 1533,1539 ----
- X .PP
- X To specify control characters in ascii format for the bind command, the
- X sequence \*Q\\Cc\*U is used where `c' is the
- X! character that the control key will translate to and must be in upper case.
- X The sequence \*Q\\CP\*U would map to control-P.
- X If the user wishes to indicate the RETURN key, this is specified
- X with the string \*Q\\n\*U and
- X***************
- X*** 1513,1521 ****
- X outputs the three characters: control-A, H, line-feed.
- X To map this function key to a command, the
- X user would have to enter the sequence \*Q\\CAH\\n\*U as the key sequence,
- X! then follow up with a valid curses command.
- X! From then on, if the user presses that function key,
- X! then the command mapped to it will be executed.
- X .PP
- X The ESCAPE key is signified by the sequence, \*Q\\E\*U.
- X On a Sun-3 workstation,
- X--- 1542,1550 ----
- X outputs the three characters: control-A, H, line-feed.
- X To map this function key to a command, the
- X user would have to enter the sequence \*Q\\CAH\\n\*U as the key sequence,
- X! then follow up with a valid curses command. From then on, if the user
- X! presses that function key,
- X! the command mapped to it will be executed.
- X .PP
- X The ESCAPE key is signified by the sequence, \*Q\\E\*U.
- X On a Sun-3 workstation,
- X***************
- X*** 1527,1534 ****
- X unless bound in line mode, and can never begin with a digit.
- X .PP
- X Whenever a command is entered, other than `^L'
- X! .RB ( redraw ),
- X! that causes the screen to scroll or be refreshed in any way,
- X .I Mush
- X is left in the
- X .I continue
- X--- 1556,1563 ----
- X unless bound in line mode, and can never begin with a digit.
- X .PP
- X Whenever a command is entered, other than `^L'
- X! .RB ( redraw )
- X! which causes the screen to scroll or be refreshed in any way,
- X .I Mush
- X is left in the
- X .I continue
- X***************
- X*** 1577,1583 ****
- X .PP
- X At the end of each list of menu entries for panel items is an item
- X labelled \*Qhelp\*U.
- X! When this item is chosen, help with that command
- X is displayed in the center of the console.
- X .PP
- X When composing letters, the interface is the same for the tool mode,
- X--- 1606,1612 ----
- X .PP
- X At the end of each list of menu entries for panel items is an item
- X labelled \*Qhelp\*U.
- X! When this item is chosen, help for that command
- X is displayed in the center of the console.
- X .PP
- X When composing letters, the interface is the same for the tool mode,
- X***************
- X*** 1609,1615 ****
- X facility allows users to customize
- X .I Mush
- X to resemble other mailers.
- X! However, efforts have already been made to include commands which are backwards
- X compatible with other line-mode mailers.
- X Users of the graphics tool mode of
- X .I Mush
- X--- 1638,1644 ----
- X facility allows users to customize
- X .I Mush
- X to resemble other mailers.
- X! However, efforts have already been made to include commands that are backwards
- X compatible with other line-mode mailers.
- X Users of the graphics tool mode of
- X .I Mush
- X***************
- X*** 1656,1672 ****
- X control the program makes while executing.
- X The intent of the debug level is for tracking down
- X bugs with the program at specific locations.
- X! Periodically, the program may segmentation fault and core dump.
- X When this happens, the user can reenter the program,
- X set the debugging level and recreate the problem.
- X .sp
- X If the user suspects memory allocation problems, a debugging
- X! level of 2 or higher will prevent memory from being freed causing no
- X! overwriting of memory bounds.
- X .sp
- X If the user suspects sendmail errors,
- X a debugging level of 3 or higher will prevent sendmail from starting
- X! and outgoing mail is sent to the standard output instead of actually
- X being sent.
- X .TP
- X .BR delete / undelete
- X--- 1685,1701 ----
- X control the program makes while executing.
- X The intent of the debug level is for tracking down
- X bugs with the program at specific locations.
- X! Occasionally, the program may segmentation fault and core dump.
- X When this happens, the user can reenter the program,
- X set the debugging level and recreate the problem.
- X .sp
- X If the user suspects memory allocation problems, a debugging
- X! level of 2 or higher will prevent memory from being freed so that
- X! memory bounds won't get overwritten.
- X .sp
- X If the user suspects sendmail errors,
- X a debugging level of 3 or higher will prevent sendmail from starting
- X! and outgoing mail is directed to the standard output instead of actually
- X being sent.
- X .TP
- X .BR delete / undelete
- X***************
- X*** 1688,1694 ****
- X .TP
- X .B exit
- X .RB ( x )
- X! Effects an immediate return to the login shell without
- X modifying the current folder or system spool directory.
- X .TP
- X .B expand
- X--- 1717,1723 ----
- X .TP
- X .B exit
- X .RB ( x )
- X! Returns immediately to the login shell without
- X modifying the current folder or system spool directory.
- X .TP
- X .B expand
- X***************
- X*** 1704,1710 ****
- X command, but the whole process is automated by using the function key
- X interface provided by the graphics mode.
- X By default, the last key in each function key pad displays
- X! the values of all the function keys in that set of function keys.
- X There are the left, right and top set of keys.
- X .TP
- X .BR folder " [\-N] [\-r] [!] [ %[user] | # | & | file ]"
- X--- 1733,1739 ----
- X command, but the whole process is automated by using the function key
- X interface provided by the graphics mode.
- X By default, the last key in each function key pad displays
- X! the values of all the function keys in that set.
- X There are the left, right and top set of keys.
- X .TP
- X .BR folder " [\-N] [\-r] [!] [ %[user] | # | & | file ]"
- X***************
- X*** 1736,1748 ****
- X .TP
- X .BR from " [ + | \- ]"
- X .RB ( f )
- X! With no arguments, from will print the current message's header.
- X If given a message list, from will print the headers of those
- X! messages which are in the list.
- X .sp
- X The special arguments `\-' and `+' can be given to move the
- X! current message pointer to the previous or next message
- X! respectively while also printing that message's header.
- X If a message list was given in addition to `\-' or `+', then
- X the current message pointer will be set to the first or last
- X message, respectively, in the message list given.
- X--- 1765,1779 ----
- X .TP
- X .BR from " [ + | \- ]"
- X .RB ( f )
- X! With no arguments,
- X! .I from
- X! will print the current message's header.
- X If given a message list, from will print the headers of those
- X! messages that are in the list.
- X .sp
- X The special arguments `\-' and `+' can be given to move the
- X! current message pointer to the previous or next message,
- X! respectively, while also printing that message's header.
- X If a message list was given in addition to `\-' or `+', then
- X the current message pointer will be set to the first or last
- X message, respectively, in the message list given.
- X***************
- X*** 1802,1808 ****
- X The next two positions indicate the message status.
- X The first
- X may be one of, \*QN\*U (new and unread), \*QU\*U (old, but still
- X! unread), \*Q*\*U (deleted), \*QO\*U (old and read), \*QP\*U (preserved),
- X or \*Q \*U (read).
- X The second position may have an \*Qr\*U if the message
- X has been replied to.
- X--- 1833,1839 ----
- X The next two positions indicate the message status.
- X The first
- X may be one of, \*QN\*U (new and unread), \*QU\*U (old, but still
- X! unread), \*Q*\*U (deleted), \*QS\*U (saved), \*QP\*U (preserved),
- X or \*Q \*U (read).
- X The second position may have an \*Qr\*U if the message
- X has been replied to.
- X***************
- X*** 1817,1823 ****
- X .I 278
- X and the subject of the message is
- X .IR Test .
- X! The format of the message header exemplified here is described by
- X the string variable
- X .BR hdr_format .
- X The example given above has a hdr_format of
- X--- 1848,1854 ----
- X .I 278
- X and the subject of the message is
- X .IR Test .
- X! The format of the message header shown here is described by
- X the string variable
- X .BR hdr_format .
- X The example given above has a hdr_format of
- X***************
- X*** 1835,1846 ****
- X .nf
- X .in +2
- X .ta 1i
- X! n new messages
- X! d deleted messages
- X! u unread messages
- X! o old messages
- X! r replied to messages
- X! a all messages
- X .fi
- X .in -2
- X .sp
- X--- 1866,1879 ----
- X .nf
- X .in +2
- X .ta 1i
- X! .if t .ta 1.5i
- X! n new messages
- X! d deleted messages
- X! u unread messages
- X! o old messages
- X! r replied to messages
- X! s saved messages
- X! a all messages
- X .fi
- X .in -2
- X .sp
- X***************
- X*** 1854,1860 ****
- X The
- X .B z
- X command can also be used; `z' alone will print the next
- X! screenful (thus, the `+' is optional),
- X and \*Qz \-\*U is equivalent to \*Qh \-\*U.
- X .sp
- X Headers affects all the messages it displays, so piping may be done
- X--- 1887,1893 ----
- X The
- X .B z
- X command can also be used; `z' alone will print the next
- X! screenful (thus, the `+' is optional)
- X and \*Qz \-\*U is equivalent to \*Qh \-\*U.
- X .sp
- X Headers affects all the messages it displays, so piping may be done
- X***************
- X*** 1961,1967 ****
- X Mailing to programs is indicated by the pipe `|' character preceding the
- X program name.
- X Since the user's path is searched, full pathnames are not required for
- X! programs which lie in the user's PATH environment variable.
- X Example:
- X .sp
- X .ti +2
- X--- 1994,2000 ----
- X Mailing to programs is indicated by the pipe `|' character preceding the
- X program name.
- X Since the user's path is searched, full pathnames are not required for
- X! programs that lie in the user's PATH environment variable.
- X Example:
- X .sp
- X .ti +2
- X***************
- X*** 1993,2003 ****
- X The included message is indented by
- X the string \*Q> \*U or by the string described by the variables
- X .BR indent_str ,
- X! .BR pre_indent-str ,
- X and
- X .BR post_indent_str .
- X See the VARIABLES section for more information on these string values.
- X! If a message list is given after the \-i option, then the message
- X described by that list are included.
- X The \-h option is identical to the \-i option except that the headers of
- X the message are also included.
- X--- 2026,2036 ----
- X The included message is indented by
- X the string \*Q> \*U or by the string described by the variables
- X .BR indent_str ,
- X! .BR pre_indent_str ,
- X and
- X .BR post_indent_str .
- X See the VARIABLES section for more information on these string values.
- X! If a message list is given after the \-i option, then the messages
- X described by that list are included.
- X The \-h option is identical to the \-i option except that the headers of
- X the message are also included.
- X***************
- X*** 2025,2037 ****
- X The forward option does not allow you to edit the message(s) being forwarded
- X unless the -e flag is also specified.
- X The subject of the message (if available) is the same as the \fIcurrent\f
- X! message; it not necessarily the message of the message being forwarded.
- X The subject of forwarded mail cannot be changed.
- X However, using the \-e flag
- X will allow the user to change the subject once in editing mode using the
- X escape sequence, \*Q~s\*U.
- X .sp
- X! Forwarded mail that has not been edited by the user will contains special
- X headers such as
- X .sp
- X .ti +2
- X--- 2058,2070 ----
- X The forward option does not allow you to edit the message(s) being forwarded
- X unless the -e flag is also specified.
- X The subject of the message (if available) is the same as the \fIcurrent\f
- X! message; it is not necessarily the subject of the message being forwarded.
- X The subject of forwarded mail cannot be changed.
- X However, using the \-e flag
- X will allow the user to change the subject once in editing mode using the
- X escape sequence, \*Q~s\*U.
- X .sp
- X! Forwarded mail that has not been edited by the user will contain special
- X headers such as
- X .sp
- X .ti +2
- X***************
- X*** 2039,2045 ****
- X .ti +2
- X Resent-From:
- X .sp
- X! and perhaps other depending on your mail transport agent.
- X Sendmail, for example, will add a number of other \*QResent-*\*U headers.
- X .TP
- X .BR my_hdr / un_hdr
- X--- 2072,2078 ----
- X .ti +2
- X Resent-From:
- X .sp
- X! and perhaps others, depending on your mail transport agent.
- X Sendmail, for example, will add a number of other \*QResent-*\*U headers.
- X .TP
- X .BR my_hdr / un_hdr
- X***************
- X*** 2090,2103 ****
- X Options:
- X .ta 1.5i
- X .in +2
- X- \-d [+-]date messages sent on or [+ after] [`\-' before] date.
- X \-ago <format> search for messages relative to today's date.
- X \-f search for pattern in \*QFrom\*U field only.
- X \-i ignore case of letters when searching.
- X \-r msg_list search only the listed messages.
- X \-s search for pattern in \*QSubject\*U field only.
- X \-t search for pattern in \*QTo\*U field only.
- X- \-h header search for pattern in specified header only.
- X \-x select messages not containing the pattern.
- X .in -2
- X .fi
- X--- 2123,2136 ----
- X Options:
- X .ta 1.5i
- X .in +2
- X \-ago <format> search for messages relative to today's date.
- X+ \-d [+-]date messages sent on or [+ after] [`\-' before] date.
- X \-f search for pattern in \*QFrom\*U field only.
- X+ \-h header search for pattern in specified header only.
- X \-i ignore case of letters when searching.
- X \-r msg_list search only the listed messages.
- X \-s search for pattern in \*QSubject\*U field only.
- X \-t search for pattern in \*QTo\*U field only.
- X \-x select messages not containing the pattern.
- X .in -2
- X .fi
- X***************
- X*** 2149,2155 ****
- X required, use the \-d option and specify specific dates.
- X .sp
- X Also note that the -ago option allows the \*Qbefore\*U (-) and \*Qafter\*U (+)
- X! arguments. Thus, you may pick for all messages older than 1 week with:
- X .sp
- X .ti +2
- X pick -ago -1 week
- X--- 2182,2188 ----
- X required, use the \-d option and specify specific dates.
- X .sp
- X Also note that the -ago option allows the \*Qbefore\*U (-) and \*Qafter\*U (+)
- X! arguments. Thus, you may pick all messages older than 1 week with:
- X .sp
- X .ti +2
- X pick -ago -1 week
- X***************
- X*** 2160,2167 ****
- X .ti +2
- X pick \-d 2/5/86 | pick \-d \-2/5/87 | pick \-s "mail stuff" | lpr
- X .sp
- X! will find all the messages between the dates February 5, 1986 and
- X! February 5, 1987 that contain the subject "mail stuff" and send them
- X to the printer.
- X .sp
- X .ti +2
- X--- 2193,2200 ----
- X .ti +2
- X pick \-d 2/5/86 | pick \-d \-2/5/87 | pick \-s "mail stuff" | lpr
- X .sp
- X! will find all the messages between the dates February 5, 1986, and
- X! February 5, 1987, that contain the subject "mail stuff" and send them
- X to the printer.
- X .sp
- X .ti +2
- X***************
- X*** 2201,2210 ****
- X .BR type ,
- X .BR t )
- X Takes a message list and displays each message on the user's terminal.
- X! If the first letter of the command is a capital letter (`P' or `T'),
- X then \*Qignored\*U headers are not ignored
- X .I provided
- X! that the variable,
- X .B alwaysignore
- X is not set.
- X If the variable is set, the ignored headers will be
- X--- 2234,2243 ----
- X .BR type ,
- X .BR t )
- X Takes a message list and displays each message on the user's terminal.
- X! If the first letter of the command is a capital letter (`P' or `T')
- X then \*Qignored\*U headers are not ignored
- X .I provided
- X! that the variable
- X .B alwaysignore
- X is not set.
- X If the variable is set, the ignored headers will be
- X***************
- X*** 2227,2233 ****
- X .IR Mush .
- X If the variable \*Qhold\*U is set, all messages not marked for deletion are
- X saved in the spool directory.
- X! Otherwise, messages which have been read are saved to
- X .I ~/mbox
- X or to the file described by the string variable
- X .BR mbox .
- X--- 2260,2266 ----
- X .IR Mush .
- X If the variable \*Qhold\*U is set, all messages not marked for deletion are
- X saved in the spool directory.
- X! Otherwise, messages that have been read are saved to
- X .I ~/mbox
- X or to the file described by the string variable
- X .BR mbox .
- X***************
- X*** 2252,2258 ****
- END_OF_FILE
- if test 57115 -ne `wc -c <'Diffs.6.3.b'`; then
- echo shar: \"'Diffs.6.3.b'\" unpacked with wrong size!
- fi
- # end of 'Diffs.6.3.b'
- fi
- echo shar: End of shell archive.
- exit 0
-